const app = getApp(),
  url = app.globalData.apiUrl
/**
 * 微信登录，每次打开时调用
 */
let login_i = 0
function login() {
  // /**
  //  *获取user 的code
  //  */
  // let getCode = new Promise((resolve, reject) => {
  //   wx.login({
  //     success(res) {
  //       if (res.code) {
  //         resolve(res.code)
  //       } else {
  //         console.error('登录失败！' + res.errMsg)
  //         reject(err)
  //       }
  //     }
  //   })
  // })
  // /**
  //  * 获取用户信息
  //  */
  // let getUseInfo = new Promise((resolve, reject) => {
  //   wx.getUserInfo({
  //     withCredentials: true,
  //     lang: 'zh_CN',
  //     success(res) {
  //       resolve(res)
  //     },
  //     fail(err) {
  //       console.error('用户信息获取失败')
  //       reject(err)
  //     }
  //   })
  // })
  // /**
  //  * 向后台获取login_token
  //  */
  // let getToken = res => {
  //   // console.log(res)
  //   return new Promise((resolve, reject) => {
  //     let code = res[0],
  //       raw_data = res[1].rawData,
  //       signature = res[1].signature
  //     // 发起网络请求
  //     wx.request({
  //       url: url + '/user/login',
  //       method: 'post',
  //       data: {
  //         code: code,
  //         raw_data: raw_data,
  //         signature: signature
  //       },
  //       success(res) {
  //         res.data.err_code != 10000 ? resolve(res.data.data) : reject(res)
  //       },
  //       fail(err) {
  //         console.error('获取login_token失败', err)
  //         reject(err)
  //       }
  //     })
  //   })
  // }
  // /**
  //  * 拿到login_token 有效时间60分钟
  //  * 对后台返回值进行处理
  //  */
  // return Promise.all([getCode, getUseInfo])
  //   .then(res => {
  //     return getToken(res)
  //   })
  //   .catch(err => {
  //     console.error(err)
  //     console.log('重启login')
  //     // 重新获取
  //     if (login_i < 10) {
  //       return login()
  //     } else {
  //       return 0
  //     }
  //     login_i++
  //   })
  return new Promise((resolve, reject) => {
    wx.login({
      success(res) {
        let code = res.code
        wx.getUserInfo({
          success(res) {
            const rawData = res.rawData
            const sign = res.signature
            wx.request({
              url: url + '/user/login',
              method: 'POST',
              header: {
                'content-type': 'application/x-www-form-urlencoded'
              },
              data: {
                raw_data: rawData,
                signature: sign,
                code: code
              },
              success: function(res) {
                // console.log(res)
                if (res.statusCode == 200) {
                  resolve(res.data.data)
                } else {
                  if (login_i < 10) {
                    console.log('重启login')
                    console.log({
                      raw_data: rawData,
                      signature: sign,
                      code: code
                    })
                    console.log(res)

                    login_i++
                    login()
                  } else {
                    reject(res)
                  }
                }
              },
              fail(err) {
                console.error(err)
                reject(err)
              }
            })
          }
        })
      }
    })
  })
}
/**
 * 检查用户授权状态
 */
function check() {
  return new Promise((resolve, reject) => {
    wx.getSetting({
      success(res) {
        res.authSetting['scope.userInfo'] ? resolve() : reject()
      }
    })
  })
}
/**
 * 是否绑定教务系统
 */
function checkSSF(ok = () => {}, no = () => {}) {
  if (app.globalData.SSFW) {
    ok()
  } else {
    no()
  }
}
/**
 * 绑定教务系统
 * @param {string} login_token 登录token
 * @param {string} ssfw_username 教务系统用户名
 * @param {number} ssfw_password 教务系统密码
 */
function bindSSFWAccount(login_token, ssfw_username, ssfw_password) {
  return new Promise((resolve, reject) => {
    // 发起网络请求
    wx.request({
      url: url + '/user/bindSSFWAccount',
      method: 'post',
      data: {
        login_token: login_token,
        username: ssfw_username,
        password: ssfw_password
      },
      success(res) {
        console.log(res.data)

        res.data.err_code == 0 ? resolve(res.data) : reject(res.data)
      },
      fail(err) {
        console.error(err)
      }
    })
  })
}
/**
 * 获取他人信息
 * @param {number} user_id 用户ID
 */
function getOtherUserInfo(user_id) {
  return new Promise((resolve, reject) => {
    wx.request({
      url: url + '/user/' + user_id + '/info',
      method: 'get',
      data: {
        login_token: app.globalData.login_token
      },
      success(res) {
        resolve(res)
      },
      fail(err) {
        reject(err)
        console.error(err)
      }
    })
  })
}
/**
 * 获取我的信息
 */
function myInfo() {
  return new Promise((resolve, reject) => {
    wx.request({
      url: url + '/my/info',
      method: 'get',
      data: {
        login_token: app.globalData.login_token
      },
      success(res) {
        resolve(res)
      },
      fail(err) {
        reject(err)
        console.error(err)
      }
    })
  })
}
/**
 * 我的消息列表
 */
function message(page = 1) {
  return new Promise((resolve, reject) => {
    wx.request({
      url: url + '/my/message',
      method: 'get',
      data: {
        login_token: app.globalData.login_token,
        page: page
      },
      success(res) {
        let arr = res.data.data.list
        if (arr) {
          arr = arr.map(item => {
            item.time = utc2beijing(item.updated_at || item.created_at)
            if (item.thing) {
              item.thing.cover_image = app.globalData.baseURL + '/' + item.thing.cover_image
            }

            return item
          })
          res.data.data.list = arr
        }
        // console.log(arr)

        resolve(res)
      },
      fail(err) {
        reject(err)
        console.error(err)
      }
    })
  })
}
function utc2beijing(utc) {
  var date2 = new Date(utc)
  return (
    // date2.getFullYear() +
    // '年' +
    date2.getMonth() + 1 + '月' + date2.getDate() + '日 ' + date2.getHours() + ':' + (Array(2).join(0) + date2.getMinutes()).slice(-2)
  )
}
/**
 * 标记已读消息
 * @param {number} message_id  消息id
 */
function messageSetRead(message_id) {
  return new Promise((resolve, reject) => {
    wx.request({
      url: url + '/my/message/setRead',
      method: 'post',
      data: {
        login_token: app.globalData.login_token,
        message_id: message_id
      },
      success(res) {
        resolve(res)
      },
      fail(err) {
        reject(err)
        console.error(err)
      }
    })
  })
}
/**
 * 删除消息
 * @param {number} id 消息ID
 */
function deleMessage(id) {
  console.log(id, app.globalData.login_token)

  return new Promise((resolve, reject) => {
    wx.request({
      url: url + '/my/message/' + id,
      method: 'delete',
      data: {
        login_token: app.globalData.login_token
      },
      success(res) {
        if (res.data.err_code == 0) {
          resolve(res)
        } else {
          reject(res)
        }
      },
      fail(err) {
        reject(err)
        console.error(err)
      }
    })
  })
}
module.exports = {
  login: login,
  check: check,
  bindSSFWAccount: bindSSFWAccount,
  getOtherUserInfo: getOtherUserInfo,
  myInfo: myInfo,
  message: message,
  messageSetRead: messageSetRead,
  checkSSF: checkSSF,
  deleMessage: deleMessage
}
